package com.telit.uav.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.telit.firecommand.dto.DistrictCountDTO;
import com.telit.uav.dto.CommUavDTO;
import com.telit.uav.dto.UavQueryDTO;
import com.telit.uav.dto.UavTaskDTO;
import com.telit.uav.entity.CommUav;
import com.telit.uav.vo.*;

import java.util.Date;
import java.util.List;
import java.util.Map;


/**
 * @author zhouyu
 * @description 无人机查询接口
 */
public interface UavQueryService {
    /**
     * 根据id查询无人机信息
     * @param id
     * @return
     */
    CommUav queryById(Long id);


    /**
     * 条件查询
     *
     * @param uavCode
     * @param isOnline
     * @param isFlying
     *
     * @return
     */
    List<UavTaskDTO> queryByCondition(String uavCode, Integer isOnline, Integer isFlying);


    UavSumVO queryByIsOnlineSum(String uavCode, Integer isOnline, String cityCode, Integer isFlying);

    List<UavIsOnlineSumVO> queryUavByCityCode(String uavCode, Integer isOnline, String cityCode, Integer isFlying);

    UavVO queryUavById(Long id);

    /**
     * 根据id查name
     *
     * @param id
     *
     * @return
     */
    String queryNameById(Long id);

    /**
     * 查询子任务不同状态数量
     * @param taskId
     * @param status
     * @return
     */
    Long querySubTaskNumber(Long taskId, String status);

    /**
     * 查询逾期任务数量
     * @param taskId
     * @param endTime
     * @return
     */
    Long queryDelayNumber(Long taskId, Date endTime);

    /**
     * 查询轨迹
     * @param taskId
     * @param userId
     * @return
     */
    String queryCruisePointCollection(Long taskId, Long userId);

    /**
     * 查询所有在线无人机信息，返回List<Map<String,Object>>
     * @returnnpm
     */
    List<Map<String, Object>> selectListMap();

    /**
     * 无人机巡航首页离线无人机信息
     * @param uavCode
     * @return
     */
    UavTaskDTO getUnOnlineUavInfo(String uavCode);

    /**
     * 通过code查询name
     * @param uavCode
     * @return
     */
    String queryNameByCode(String uavCode);

    /**
     * 查询总的无人机数量
     * @return
     */
    Integer uavCount(Integer isFlying);

    /**
     * 查询无人机
     * @param uavName
     * @return
     */
    List<CommUavDTO> queryByName(String uavName);

    /**
     * 查询所有无人机设备厂商
     * @return
     */
    List<Map<String,Object>> listUavProducter();

    /**
     * 根据设备厂家Id查询无人机型号
     * @param producterId
     * @return
     */
    List<Map<String,Object>> getUavModelByProId(Long producterId);

    /**
     * 根据uavCode查询token值
     * @param uavCode
     * @return
     */
    String queryTokenByUavCode(String uavCode);

    /**
     * 查询前4个监控位置
     *
     * @return
     */
    List<CommUav> queryPositionCamera();


    List<UavVO> querySimpleDataByCondition(String radius, String longitude, String latitude, String flag);

    IPage<UavVO> listUavByPage(Integer current, Integer size, UavQueryDTO uavQueryDTO);

    IPage<UavDeviceProducterVO> listDeviceProducterByPage(Integer current, Integer size, String name);

    List<CommUavModelVO> listDeviceModel(String name);

    void deleteDeviceProducter(Long id);

    /**
     * 查询无人机token
     *
     * @return
     */
    List<String> listUavToken();

    DistrictCountDTO qryNumByParentCode(Integer isOnline, String uavName, String districtCode);

    DistrictCountDTO qryDistrictListByParentCode(Integer isOnline, String uavName, String districtCode);

}
